'use strict';

const BaseInit = require('../../libs/base/BaseInit');
const Redis = require('./Redis');

/**
 * Redis进程初始化
 */
class RedisInit extends BaseInit {
  /**
   * 构造函数
   */
  constructor() {
    super('Redis');
  }

  /**
   * 创建服务实例
   */
  async createService() {
    await this.createOneService('Redis', Redis);
  }
}

// 监听未捕获的异常
process.on('uncaughtException', (err) => {
  console.error('[Redis] 未捕获的异常:', err);
});

// 监听未处理的Promise拒绝
process.on('unhandledRejection', (reason, promise) => {
  console.error('[Redis] 未处理的Promise拒绝:', reason);
});

// 创建并初始化Redis服务
const redisInit = new RedisInit();

// 获取命令行参数
const args = process.argv.slice(2);
if (args.length >= 2) {
  process.env.SERVICE_NAME = args[0];
  process.env.SERVICE_PORT = args[1];
  
  if (args.length >= 3) {
    process.env.BREAK_PORT = args[2];
  }
}

// 如果有调试端口，设置启动参数
if (redisInit.breakPort) {
  console.log(`[Redis] 当前进程启用调试，调试端口: ${redisInit.breakPort}`);
}

// 启动初始化流程
redisInit.init().catch(error => {
  console.error('[Redis] 初始化失败:', error);
  process.exit(1);
});

// 监听进程信号
process.on('SIGINT', () => redisInit.handleExit());
process.on('SIGTERM', () => redisInit.handleExit()); 